model MMT extends MoC {

  /*******************************************************************************************************************\
   * MMT nodes                                                                                                   *
  \*******************************************************************************************************************/
  nodes {
    abstract node class MMTNode extends Infom;

    abstract node class Link extends MMTNode;

    abstract node class Module extends MMTNode;
    node class Theory extends Module;  
    node class View extends Module, Link;
  
    abstract node class Symbol extends MMTNode;  
    node class Constant extends Symbol;
    node class Structure extends Symbol, Link;
  
    abstract node class Assignment extends MMTNode;  
    node class ConAss extends Assignment;
    node class StrAss extends Assignment;
  }
  
  /*******************************************************************************************************************\
   * MMT edges                                                                                                   *
  \*******************************************************************************************************************/
  edges {
  
    abstract edge class MMTEdge extends requiredBy;

    edge class ImportedBy extends MMTEdge
      connect Theory[*] -> Theory[*];

    edge class HasMeta extends MMTEdge
      connect Theory[0:1] -> Theory[*];

    edge class HasOccurrenceOfInType extends MMTEdge
      connect Symbol[*] -> Symbol[*];
                    
    edge class HasOccurrenceOfInDefinition extends MMTEdge
      connect Symbol[*] -> Symbol[*];

    edge class HasDomain extends MMTEdge
      connect Link -> Theory[*];

    edge class HasCodomain extends MMTEdge
      connect Link -> Theory[*];
  }
  
  /*******************************************************************************************************************\
   * MMT equivs                                                                                                  *
  \*******************************************************************************************************************/
  equivs {
    // not yet implemented
  }  
  
  /*******************************************************************************************************************\
   * MMT rules                                                                                                   *
  \*******************************************************************************************************************/
  rules {
    // not yet implemented
  }   
  
}
